home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / amigaos4_only / ifxlite / imagefx3 / rexx / motionreq.ifx < prev    next >
Text File  |  2004-08-03  |  18KB  |  1,007 lines

  1. /*
  2.  *  $VER: MotionReq 1.0.4 (12.10.94)
  3.  *
  4.  *  Motion Requester for ImageFX 2.0  by Rusty Mills 
  5.  * 
  6.  *  Portions of this program are NOT freely distributable without the 
  7.  *                 permission of the author!
  8.  *
  9.  */
  10. SIGNAL ON HALT
  11.  
  12. /* SIGNAL ON ERROR */
  13.  
  14. OPTIONS RESULTS
  15.  
  16. Drawmode Normal
  17. Dmode=result
  18. Drawmode Dmode
  19.  
  20. RequestResponse "Load Previously Saved Settings?"
  21. IF rc=0 THEN CALL loadset
  22. ENDIF
  23.  
  24. rdbrsh:
  25.  
  26. GETBRUSH 
  27.  
  28. /*  IF result=0 THEN CALL ldbsh
  29.   ENDIF
  30. */
  31.  
  32. PARSE VAR result name width height .
  33.  
  34. stx=0
  35. sty=0
  36. fr=24
  37. edx=0
  38. edy=0
  39. si=0
  40. so=0
  41. edz=width
  42. stz=width
  43. rtz=0
  44. Svs=0
  45. Ani=0
  46. Rev=0
  47. srtz=0
  48. nbnm=""
  49. Aniflg=0
  50.  
  51. MotReq:
  52.  
  53. SaveBrushAS ILBM "RAM:temp.bsh" FORCE
  54.  
  55.  
  56.    Gadget.1 = 'I/35/28/X:/'||stx
  57.    Gadget.2 = 'I/35/43/Y:/'||sty
  58.    Gadget.3 = 'I/110/28//'||edx
  59.    Gadget.4 = 'I/110/43//'||edy
  60.    Gadget.5 = 'L/355/28/2/0/Start Size:'||stz
  61.         Gadget.6 = 'I/385/43/End Size:/'||edz
  62.    Gadget.7 = 'I/155/74/Start Rotate Z:/'||srtz
  63.    Gadget.8 = 'I/155/89/Amount to Rotate Z:/'||rtz
  64.         Gadget.9 = 'I/380/74/# Frs. Ease-beg:/'||si
  65.         Gadget.10 = 'I/380/89/# Frs. Ease-end:/'||so
  66.    Gadget.11 = 'X/135/122/Animation/'||Ani
  67.         Gadget.12 = 'X/320/140/Save Settings/'||Svs
  68.    Gadget.13 = 'C/25/140//2/Preview/Render'
  69.         Gadget.14 = 'L/10/57/2/2/_________________________________________________________'  
  70.         Gadget.15 = 'L/10/105/1/2/_________________________________________________________'
  71.         Gadget.16 = 'L/10/62/1/2/_________________________________________________________' 
  72.         Gadget.17 = 'L/10/100/2/2/_________________________________________________________'
  73.         Gadget.18 = 'L/12/57/2/2/________________________________________________________' 
  74.         Gadget.19 = 'L/12/105/1/2/________________________________________________________'
  75.         Gadget.20 = 'L/12/62/1/2/________________________________________________________' 
  76.         Gadget.21 = 'L/12/100/2/2/________________________________________________________'
  77.         Gadget.22 = 'L/55/18/1/0/Start'
  78.    Gadget.23 = 'L/135/18/1/0/End'
  79.    Gadget.24 = 'F/25/122/Load Brush/Load Brush Image///'
  80.    Gadget.25 = 'C/202/28//9/None/UL const/LL const/UR const/LR const/UL sep/LL sep/UR sep/LR sep'
  81.    Gadget.26 = 'L/227/18/1/0/Shadow'
  82.    Gadget.27 = 'X/135/140/Create in Reverse/'||Rev
  83.    Gadget.28 = 'I/385/120/Total # of Frames:/'||fr
  84.    Gadget.29 = 'C/202/43//2/Hard Edge/Soft Edge'
  85.  
  86. ComplexRequest '"Motion Requester"' 29 Gadget 475 176
  87.  
  88. IF rc~=0 THEN EXIT
  89. ENDIF
  90.  
  91. IF width=height THEN pers=width
  92. ELSE pers=width/(width-height)
  93. ENDIF
  94.  
  95.    stx=Result.1
  96.    sty=Result.2
  97.    edx=Result.3
  98.    edy=Result.4 
  99.    edz=Result.6
  100.    srtz=Result.7
  101.     rtz=Result.8
  102.     si=Result.9
  103.     so=Result.10
  104.    Ani=Result.11
  105.    Svs=Result.12
  106.    prv=Result.13
  107.    nbnm=Result.24
  108.    Shd=Result.25
  109.    Rev=Result.27
  110.    fr=Result.28
  111.    sed=Result.29
  112.  
  113. Message "Calculating Move"
  114.  
  115.  
  116. IF nbnm="" THEN CALL cnton
  117.   ELSE CALL Lbrsh
  118. ENDIF
  119.  
  120. cnton:
  121.  
  122. CALL DetLoad
  123.  
  124. LBctr=1
  125.  
  126. IF Ani=1 THEN CALL AniLoad
  127. ENDIF 
  128.  
  129. IF prv=0 THEN CALL Prep
  130. ENDIF
  131.  
  132. IF Svs=1 THEN CALL Saveset
  133. ENDIF
  134.  
  135. RequestFile '"Saving Images Base Name"'
  136. IF rc~=0 THEN CALL MotReq
  137. ENDIF
  138.  
  139. imnam=result
  140.  
  141. Prep:
  142.  
  143. IF rtz~=0 THEN CALL rotagl
  144. ENDIF
  145.  
  146. ctr=1
  147. XPL.=0
  148. YPL.=0
  149. ZPL.=0
  150.  
  151. IF stx>edx THEN ttx=stx-edx
  152.  ELSE ttx=edx-stx
  153. ENDIF
  154.   IF sty>edy THEN tty=sty-edy
  155.    ELSE tty=edy-sty
  156.   ENDIF
  157.     IF stz>edz THEN ttz=stz-edz
  158.      ELSE ttz=edz-stz
  159.     ENDIF
  160.  
  161. IF ttx=0 THEN ttx=stx
  162. ENDIF
  163.   IF tty=0 THEN tty=sty
  164.   ENDIF
  165.     IF ttz=0 THEN ttz=stz
  166.     ENDIF
  167.  
  168. IF ttx~=stx THEN CALL CalcX
  169.       
  170.   ELSE DO i=1 TO fr-1
  171.      XPL.ctr=ttx
  172.    ctr=ctr+1
  173.   END
  174. ENDIF
  175. IF EXISTS('RAM:XCord.TXT')=1 THEN ADDRESS COMMAND 'C:Delete RAM:XCord.TXT'
  176. ENDIF
  177.  
  178.  
  179. IF tty~=sty THEN CALL CalcY
  180.       
  181.   ELSE DO i=1 TO fr-1
  182.      YPL.ctr=tty
  183.    ctr=ctr+1
  184.   END
  185. ENDIF
  186. IF EXISTS('RAM:YCord.TXT')=1 THEN ADDRESS COMMAND 'C:Delete RAM:YCord.TXT'
  187. ENDIF
  188.  
  189.  
  190. IF ttz~=stz THEN CALL CalcZ
  191.       
  192.   ELSE DO i=1 TO fr-1
  193.      ZPL.ctr=ttz
  194.    ctr=ctr+1
  195.   END
  196. ENDIF
  197. IF EXISTS('RAM:ZCord.TXT')=1 THEN ADDRESS COMMAND 'C:Delete RAM:ZCord.TXT'
  198. ENDIF
  199.  
  200. SELECT
  201.     
  202.     WHEN Shd=0 THEN NOP
  203.     WHEN Shd=1 THEN CALL ConstShd /* UL const */
  204.     WHEN Shd=2 THEN CALL ConstShd /* LL const */
  205.     WHEN Shd=3 THEN CALL ConstShd /* UR const */
  206.     WHEN Shd=4 THEN CALL ConstShd /* LR const */
  207.     WHEN Shd=5 THEN CALL SepShd /* UL sep */
  208.     WHEN Shd=6 THEN CALL SepShd /* LL sep */
  209.     WHEN Shd=7 THEN CALL SepShd /* UR sep */
  210.     WHEN Shd=8 THEN CALL SepShd /* LR sep */
  211. END
  212.  
  213. IF prv=0 THEN CALL Preview
  214.  ELSE CALL Stamp
  215. ENDIF 
  216.  
  217. IF EXISTS('RAM:temp.bsh')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh'
  218. ENDIF
  219.  
  220. IF EXISTS('RAM:temp.bsh.nail.info')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh.nail.info'
  221. ENDIF
  222.  
  223. EXIT
  224.  
  225. CalcX:
  226.  
  227.    CF="X"
  228.    IF stx<edx THEN sp=stx
  229.      ELSE sp=edx
  230.    ENDIF
  231.    A=ttx
  232.  CALL begslio
  233. IF stx<edx THEN ctr=1
  234.    ELSE ctr=fr
  235. ENDIF
  236. DO i=1 TO fr
  237.   XPL.i=PL.ctr
  238.  IF stx<edx THEN ctr=ctr+1
  239.    ELSE ctr=ctr-1
  240.  ENDIF
  241. END
  242.  
  243. RETURN 
  244.  
  245. CalcY:
  246.  
  247.    CF="Y"
  248.    IF sty<edy THEN sp=sty
  249.      ELSE sp=edy
  250.    ENDIF
  251.    A=tty
  252.  CALL begslio
  253. IF sty<edy THEN ctr=1
  254.    ELSE ctr=fr
  255. ENDIF
  256. DO i=1 TO fr
  257.   YPL.i=PL.ctr
  258.  IF sty<edy THEN ctr=ctr+1
  259.    ELSE ctr=ctr-1
  260.  ENDIF
  261. END
  262. RETURN
  263.  
  264. CalcZ:
  265.  
  266.    CF="Z"
  267.    IF stz<edz THEN sp=stz
  268.      ELSE sp=edz
  269.    ENDIF
  270.    A=ttz
  271.  CALL begslio
  272. IF stz<edz THEN ctr=1
  273.    ELSE ctr=fr
  274. ENDIF
  275. DO i=1 TO fr
  276.   ZPL.i=PL.ctr
  277.  IF stz<edz THEN ctr=ctr+1
  278.    ELSE ctr=ctr-1
  279.  ENDIF
  280. END
  281.  
  282. RETURN
  283.  
  284.  
  285.  
  286. Stamp:
  287.  
  288. IF srtz~=0 THEN DO
  289.                  neg=SIGN(srtz)
  290.         IF neg=-1 THEN ROTATE '"'srtz
  291.                     ELSE ROTATE srtz
  292.         ENDIF
  293.       END
  294. ENDIF
  295.  
  296. SaveBrushAS ILBM "RAM:temp.bsh" FORCE
  297.  
  298. EdgeMode AntiAlias 0
  299.  
  300. ctr=1
  301.  IF Rev=0 THEN inum=1
  302.   ELSE inum=fr
  303.  ENDIF
  304. LBctr=1
  305. DO i=1 TO fr
  306.  
  307. message "Creating Frame "inum
  308.  
  309. IF Ani=1 THEN DO
  310.                CALL AniLoad
  311.                  neg=SIGN(srtz)
  312.         IF neg=-1 THEN ROTATE '"'srtz
  313.                     ELSE ROTATE srtz
  314.         ENDIF
  315.               END
  316. ENDIFj
  317.  
  318. IF etz~=stz THEN CALL sclz
  319. ENDIF
  320.  
  321.   IF rtz~=0 THEN ROTATE angl.ctr
  322.   ENDIF
  323. /* Hook "ImageFX2:Hooks/Sys/Rotate"  56 0 angl.ctr 0 1 46 30 0 0 0 0 1
  324. */
  325.   
  326.   IF Shd>0 THEN DO
  327.         DrawMode ARGS 60
  328.         DrawMode Darken
  329.         NewArea
  330.         AddArea Shdx.ctr Shdy.ctr
  331.         AddArea Shdx.ctr Shdy.ctr
  332.           CALL ShdoEdg
  333.         FreeLine
  334.          EdgeMode AntiAlias 0
  335.          DrawMode Dmode
  336.       END
  337.   ENDIF
  338.    NewArea
  339.    AddArea XPL.ctr YPL.ctr
  340.    FreeLine
  341. message "Saving   Frame "inum
  342.     SavebufferAs ILBM imnam"."||RIGHT('00'||inum,3) 
  343. Undo
  344. Undo
  345. ctr=ctr+1
  346.  
  347. IF Rev=0 THEN inum=inum+1
  348.  ELSE inum=inum-1
  349. ENDIF
  350.  
  351. END
  352.  
  353. EXIT
  354.  
  355. Preview:
  356.  
  357. IF Rev=1 THEN ctr=fr
  358.   ELSE ctr=1
  359. ENDIF
  360.  
  361. DO i=1 TO fr
  362. nws=ZPL.ctr-(ZPL.ctr/pers)
  363.   VirtualBox XPL.ctr YPL.ctr XPL.ctr+ZPL.ctr YPL.ctr+nws
  364.   VirtualBox XPL.ctr YPL.ctr XPL.ctr+ZPL.ctr YPL.ctr+nws
  365.  IF Rev=1 THEN ctr=ctr-1
  366.   ELSE ctr=ctr+1
  367.  ENDIF
  368. END
  369.  
  370. CALL Motreq
  371.  
  372. sclz:
  373.  
  374. nwsy=ZPL.ctr-(ZPL.ctr/pers)
  375.  
  376. LoadBrush "RAM:temp.bsh"
  377.  
  378. Region Brush
  379.  
  380. Scale ZPL.ctr nwsy
  381.  
  382. RETURN
  383.  
  384. SaveSet:
  385.  
  386. IF prv=0 THEN RETURN
  387. ENDIF
  388.  
  389. RequestFile '"Save Settings"' "S:" "Motion.stg"
  390.  
  391. IF rc~=0 THEN RETURN
  392. ENDIF
  393.  
  394. sname=result
  395.  
  396. OPF=OPEN('stemp',sname,'W')
  397.  
  398. IF OPF~=1 THEN CALL sverr
  399. ENDIF
  400.  
  401.  
  402. WRITELN('stemp',name)
  403. WRITELN('stemp',stx)
  404. WRITELN('stemp',sty)
  405. WRITELN('stemp',edx)
  406. WRITELN('stemp',edy)
  407. WRITELN('stemp',stz)
  408. WRITELN('stemp',edz)
  409. WRITELN('stemp',rtz)
  410. WRITELN('stemp',fr)
  411. WRITELN('stemp',si)
  412. WRITELN('stemp',so)
  413. WRITELN('stemp',Ani)
  414. WRITELN('stemp',srtz)
  415. WRITELN('stemp',Shd)
  416. WRITELN('stemp',Rev)
  417.  
  418. CLOSE('stemp')
  419.  
  420. RETURN
  421.  
  422. sverr:
  423.  
  424. RequestNotify "Unable to save settings file"
  425.  
  426. CALL Prep
  427.  
  428. rotagl:
  429.  
  430. /*IF fr>rtz THEN agl=fr/rtz
  431.   ELSE agl=rtz/fr
  432. ENDIF */
  433. agl=rtz/(fr-1)
  434. angl.=0
  435. ctr=1
  436. rang=0
  437. DO i=1 TO fr
  438.    angl.ctr=rang
  439.  ctr=ctr+1
  440. rang=rang+agl
  441. END 
  442.  
  443. RETURN
  444.  
  445. loadset:
  446.  
  447. RequestFile "Load"
  448. IF rc~=0 THEN CALL rdbrsh
  449. ENDIF
  450.  
  451. stnm=result
  452.  
  453. lbs=OPEN('lset',stnm,'R')
  454. IF lbs=0 THEN CALL nogo
  455. ENDIF
  456. sets.=0
  457. name=""
  458. name=READLN('lset')
  459. DO i=1 TO 14
  460.  
  461.   sets.i=READLN('lset')
  462. END
  463.  
  464. CLOSE('lset')
  465.  
  466. stx=sets.1
  467. sty=sets.2
  468. edx=sets.3
  469. edy=sets.4
  470. stz=sets.5
  471. edz=sets.6
  472. rtz=sets.7
  473. fr=sets.8
  474. si=sets.9
  475. so=sets.10
  476. Ani=sets.11
  477. srtz=sets.12
  478. Shd=sets.13
  479. Rev=sets.14
  480.  
  481. LoadBrush name
  482.  
  483. GETBRUSH
  484.  
  485. PARSE VAR result name width height .
  486.  
  487. CALL MotReq
  488.  
  489. nogo:
  490.  
  491. RequestNotify "Can't Open File "name
  492.  
  493. CALL rdbrsh
  494.  
  495. Ldbsh:
  496.  
  497. LoadBrush
  498.  
  499. CALL rdbrsh
  500.  
  501. Lbrsh:
  502.  
  503. name=nbnm
  504.  
  505. LoadBrush name
  506.  
  507. GETBRUSH
  508.  
  509. PARSE VAR result name width height .
  510.  
  511. IF width=height THEN pers=width
  512. ELSE pers=width/(width-height)
  513. ENDIF
  514.  
  515. SaveBrushAS ILBM "RAM:temp.bsh" FORCE
  516.  
  517. CALL cnton
  518.  
  519. ConstShd:
  520.  
  521. Shdx.=0
  522. Shdy.=0
  523. SELECT
  524.     
  525.     WHEN Shd=1 THEN DO i=1 to fr/* UL const */
  526.          Shdx.i=XPL.i-(XPL.i*0.10)
  527.          Shdy.i=YPL.i-(YPL.i*0.10)
  528.           END
  529.     WHEN Shd=2 THEN DO i=1 to fr/* LL const */
  530.          Shdx.i=XPL.i-(XPL.i*0.10)
  531.          Shdy.i=YPL.i+(YPL.i*0.10)
  532.           END
  533.  
  534.     WHEN Shd=3 THEN DO i=1 to fr/* UR const */
  535.          Shdx.i=XPL.i+(XPL.i*0.10)
  536.          Shdy.i=YPL.i-(YPL.i*0.10)
  537.           END
  538.  
  539.     WHEN Shd=4 THEN DO i=1 to fr/* LR const */
  540.          Shdx.i=XPL.i+(XPL.i*0.10)
  541.          Shdy.i=YPL.i+(YPL.i*0.10)
  542.           END
  543. END
  544. Return
  545.  
  546. SepShd:
  547.  
  548. Shdx.=0
  549. Shdy.=0
  550.    CF="ShdX"
  551. SELECT
  552.    WHEN Shd=5 THEN sp=XPL.1-(XPL.1*0.20)
  553.    WHEN Shd=6 THEN sp=XPL.1-(XPL.1*0.20)
  554.    WHEN Shd=7 THEN sp=XPL.1+(XPL.1*0.20)
  555.    WHEN Shd=8 THEN sp=XPL.1+(XPL.1*0.20)
  556. END
  557.  A=ttx*2
  558.  CALL begslio
  559. IF EXISTS('RAM:ShdXCord.TXT')=1 THEN ADDRESS COMMAND 'C:Delete RAM:ShdXCord.TXT'
  560. ENDIF
  561.    CF="ShdY"
  562. SELECT
  563.    WHEN Shd=5 THEN sp=YPL.1-(YPL.1*0.20)
  564.    WHEN Shd=6 THEN sp=YPL.1+(YPL.1*0.20)
  565.    WHEN Shd=7 THEN sp=YPL.1-(YPL.1*0.20)
  566.    WHEN Shd=8 THEN sp=YPL.1+(YPL.1*0.20)
  567. END
  568.  A=tty*2
  569.  CALL begslio
  570. IF EXISTS('RAM:ShdYCord.TXT')=1 THEN ADDRESS COMMAND 'C:Delete RAM:ShdYCord.TXT'
  571. ENDIF
  572. IF sty<edy THEN xctr=1
  573.    ELSE xctr=fr
  574. ENDIF
  575. IF stx<edx THEN yctr=1
  576.    ELSE yctr=fr
  577. ENDIF
  578. SELECT
  579.   WHEN Shd=5 THEN DO i=1 TO fr
  580.           Shdx.i=PL.xctr
  581.           Shdy.i=PL.yctr
  582.          IF sty<edy THEN yctr=yctr+1
  583.           ELSE yctr=yctr-1
  584.          ENDIF
  585.          IF stx<edx THEN xctr=xctr+1
  586.           ELSE xctr=xctr-1
  587.          ENDIF
  588.              END
  589.   WHEN Shd=6 THEN DO i=1 TO fr
  590.           Shdx.i=PL.xctr
  591.           Shdy.i=PL.yctr
  592.          IF sty<edy THEN yctr=yctr+1
  593.           ELSE yctr=yctr-1
  594.          ENDIF
  595.          IF stx<edx THEN xctr=xctr+1
  596.           ELSE xctr=xctr-1
  597.          ENDIF
  598.         END 
  599.   WHEN Shd=7 THEN DO i=1 TO fr
  600.           Shdx.i=PL.xctr
  601.           Shdy.i=PL.yctr
  602.          IF sty<edy THEN yctr=yctr+1
  603.           ELSE yctr=yctr-1
  604.          ENDIF
  605.          IF stx<edx THEN xctr=xctr+1
  606.           ELSE xctr=xctr-1
  607.          ENDIF
  608.              END
  609.   WHEN Shd=8 THEN DO i=1 TO fr
  610.           Shdx.i=PL.xctr
  611.           Shdy.i=PL.yctr
  612.          IF sty<edy THEN yctr=yctr+1
  613.           ELSE yctr=yctr-1
  614.          ENDIF
  615.          IF stx<edx THEN xctr=xctr+1
  616.           ELSE xctr=xctr-1
  617.          ENDIF
  618.              END
  619. END
  620.  
  621. Return
  622.  
  623. ShdoEdg:
  624.  
  625. IF sed=1 THEN EdgeMode FeatherIn 4
  626. ENDIF
  627.          
  628. RETURN
  629.  
  630. DetLoad:
  631.  
  632. IF Ani=0 THEN Return
  633. ENDIF
  634. digi=0
  635. con=1
  636. t=2
  637. DO WHILE con
  638.   IF RIGHT(name,t)>=0 THEN t=t+1
  639.     ELSE con=0
  640.   ENDIF
  641. END
  642. digi=t-2
  643.  
  644. IF digi=0 THEN RequestNotify 'Cannot determine frame extension.'
  645. ENDIF
  646.  
  647. nl=LENGTH(name)-(t)
  648. con=1
  649. t=2
  650. delname=DELSTR(name,1,1)
  651. basename=LEFT(delname,nl)
  652.  
  653. nlist.=""
  654. dgfl=0
  655. ctr=1
  656. DO i=1 TO fr
  657.    IF EXISTS(basename||RIGHT(i,digi,'0'))=1 THEN
  658.       nlist.i=basename||RIGHT(i,digi,'0')
  659.    ELSE dgfl=1
  660.    ENDIF
  661.    
  662.    IF dgfl=1 THEN DO
  663.                    hld=i-ctr
  664.                    nlist.i=basename||RIGHT(hld,digi,'0')
  665.          ctr=ctr+1
  666.                   END
  667.    ENDIF
  668. END
  669.  
  670. Return
  671.  
  672. AniLoad:
  673.  
  674. LoadBrush nlist.LBctr
  675.  
  676. IF rc~=0 THEN CALL MotReq
  677. ENDIF
  678.  
  679. GETBRUSH
  680.  
  681. PARSE VAR result name width height .
  682.  
  683. pers=width/(width-height)
  684.  
  685. SaveBrushAS ILBM "RAM:temp.bsh" FORCE
  686.  
  687. LBctr=LBctr+1
  688.  Aniflg=1
  689. Return
  690.  
  691. ERROR:
  692.  
  693. IF RC=2001 THEN CALL nwbrsh
  694.   ELSE DO
  695.         RequestNotify "An Arexx Error Has Occured.  Motion Requester Exiting"
  696.           IF EXISTS('RAM:temp.bsh')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh'
  697.      ENDIF
  698.  
  699.      IF EXISTS('RAM:temp.bsh.nail.info')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh.nail.info'
  700.      ENDIF
  701.    EXIT
  702.        END
  703. ENDIF
  704.  
  705.  
  706. nwbrsh:
  707.   LoadBrush
  708. IF rc~=0 THEN EXIT
  709. ENDIF
  710. CALL rdbrsh
  711.  
  712. HALT:
  713.  IF EXISTS('RAM:temp.bsh')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh'
  714.  ENDIF
  715.  
  716.  IF EXISTS('RAM:temp.bsh.nail.info')=1 THEN ADDRESS COMMAND 'C:Delete RAM:temp.bsh.nail.info'
  717.  ENDIF
  718. EXIT
  719.  
  720. /*--------------------Slowin&out.rexx (8-19-94)---------------------*/
  721. /*                             */
  722. /*    This may be used within your program                */
  723. /*    as long as this messgae is left intact.          */
  724. /*                             */
  725. /*         Arexx Program for slowin & out calculations              */
  726. /*                                   */
  727. /*        Variables that must be passed to this program             */
  728. /*                          */
  729. /*  (example values)                 */
  730. /*    |                     */
  731. /*    V                     */
  732. /*           CF=X  -- Coordinate we are processing                  */
  733. /*           sp=20 -- Value of Starting Point                       */
  734. /*           fr=70 -- Total # of Frames                             */
  735. /*           si=15 -- Total # of slowin Frames                      */
  736. /*           so=10 -- Total # of slowout Frames                     */
  737. /*           A=300 -- Total distance to move                        */
  738. /*                                */
  739. /*    The program will return the following         */
  740. /*      Variables that you may want to use.         */
  741. /*                          */
  742. /*    mess -- an error message string            */
  743. /*       used if calculations cannot          */
  744. /*       be completed.               */
  745. /*    AdjMess. -- a compound variable with 4        */
  746. /*           strings that make up a        */
  747. /*           message to be used in a          */
  748. /*           Requester asking the user        */
  749. /*           if the image can be scaled          */
  750. /*                          to compensate for a lack of pixels.     */
  751. /*    sz -- percent to scale image if main          */
  752. /*          program returns a 1 (yes) from the      */
  753. /*          AdjMess.                 */
  754. /*    flg -- flag to indicate using AdjMess. 1= use it    */   
  755. /*    flga -- flag to alert textfile not opening          */
  756. /*          flgb -- flag to alert for adjusting input     */
  757. /*    PL. -- Compound variable containing the          */
  758. /*           entire move (this is the one you want!)      */
  759. /*                                */
  760. /* The program also outputs the contents of PL into a file     */
  761. /* in RAM that is named after the coordinate it represents.    */
  762. /*                          */
  763. /*                          */
  764. /*       Written by Rusty Mills            */
  765. /*                          */
  766. /*------------------------------------------------------------------*/
  767.  
  768. begslio:
  769.  
  770. flg=0
  771. flga=0
  772. flgb=0
  773.  
  774. percA=TRUNC((fr/si)+0.5)
  775. percB=TRUNC((fr/so)+0.5)
  776. R=TRUNC((A/percA)+0.5) /* Total distance for slowin */
  777. U=TRUNC((A/percB)+0.5) /* Total distance for slowout */   
  778.  
  779. IF A<fr THEN CALL moveadj
  780. ENDIF
  781.  
  782. slowmain:
  783.  
  784. SMA=R+U
  785. SMB=si+so
  786. SMC=A-SMA
  787. SMD=fr-SMB
  788. SM=TRUNC((SMC/SMD)+0.5)
  789. MT=fr-so
  790.  
  791. IF SM=0 THEN CALL err2
  792.  
  793. IF si=1 THEN CALL err
  794. ENDIF
  795.  
  796. IF so=1 THEN CALL err
  797.  
  798. tn=1
  799.  
  800. Z=OPEN('temp'tn,'RAM:tempfile'tn,'W')
  801.    IF Z~=1 THEN EXIT
  802.    ENDIF
  803. fv=0
  804.  
  805. AB=TRUNC((R/2)+0.5)
  806.  
  807. DO fv=fv to si
  808.   WRITELN('temp'tn,AB)
  809.    AB=TRUNC((AB/2)+0.5)
  810.     IF AB<0 THEN AB=0
  811.     ENDIF
  812.     IF AB>SM THEN AB=SM
  813.     ENDIF
  814. END
  815.  
  816. ZF=CLOSE('temp'tn)
  817.  
  818. Line.=0
  819. cnt=1
  820. fx=1
  821.  
  822. ZA=OPEN('temp'tn,'RAM:tempfile'tn,'R')
  823.    IF ZA~=1 THEN EXIT
  824.    ENDIF
  825.  
  826. DO fx=fx to si
  827.   Line.cnt=READLN('temp'tn)
  828.  cnt=cnt+1
  829. END
  830.  
  831. CLOSE('temp'tn)
  832.  
  833. prnt=2
  834. fyz=1
  835. tsi=Line.prnt
  836.  
  837. DO fyz=fyz to si
  838. prnt=prnt+1
  839.   tsi=tsi + Line.prnt
  840. END
  841.  
  842. EF=TRUNC((U/2)+0.5)
  843.  IF EF>SM THEN EF=SM
  844.  ENDIF
  845.  
  846. sline.=0
  847. prnt=1
  848. p=1
  849.   DO p=p to so
  850.      sline.prnt=EF
  851.         EF=TRUNC((EF/2)+0.5)
  852.       IF EF<0 THEN EF=0
  853.       ENDIF
  854.       IF EF>SM THEN EF=SM
  855.       ENDIF
  856.     prnt=prnt+1
  857.   END
  858.  
  859. prnt=2
  860. fyz=1
  861. tso=sline.prnt
  862.  
  863. DO fyz=fyz to so
  864. prnt=prnt+1
  865.   tso=tso + sline.prnt
  866. END 
  867.  
  868. SMdis=A-(tsi+tso)
  869.  
  870. SM=SMdis/SMD
  871.  
  872. Comdis=(tsi+tso)+SMdis
  873.   IF Comdis>A THEN SM=SM-(A-Comdis)
  874.   ENDIF
  875.  
  876. FPX=sp
  877.  
  878. AB=TRUNC((R/2)+0.5)
  879. CD=TRUNC((U/2)+0.5)
  880. IF CD>SM THEN CD=SM
  881. ENDIF
  882. i=1
  883. sb=0
  884. c=1
  885. PL.=0
  886. pct=1
  887. cnt=cnt-1
  888.  
  889. /* This the Creates the compound variable PL. that is returned and 
  890. the RAM outputfile. */
  891.  
  892. Z=OPEN('tp2','RAM:'CF'Cord.TXT','W')
  893.    IF Z~=1 THEN CALL err3
  894.    ENDIF 
  895. IF flga~=1 THEN WRITELN('tp2','*** Increment file for 'CF' coordinate ***')
  896. IF flga~=1 THEN WRITELN('tp2',' ')
  897.  
  898. DO i=i to fr
  899.  
  900.  PL.pct=FPX 
  901.   IF flga~=1 THEN WRITELN('tp2','Frame.'i'  'FPX)
  902.    SELECT  
  903.     WHEN c<=si THEN CALL slin
  904.     WHEN c>si THEN CALL decd
  905.     OTHERWISE NOP
  906.    END
  907.  c=c+1
  908. pct=pct+1
  909.  
  910. END
  911.  
  912. IF flga~=1 THEN CLOSE('tp2')
  913.  
  914. ADDRESS COMMAND 'Delete'" RAM:tempfile"tn
  915.  
  916. tn=tn+1
  917.  
  918. RETURN
  919.  
  920. decd:
  921. SELECT
  922.    WHEN c<MT-2 THEN CALL cons
  923.    WHEN c>=MT-2 THEN CALL slout
  924.    OTHERWISE NOP
  925. END
  926. RETURN
  927.  
  928. slin:
  929.   FPX=FPX+Line.cnt
  930.  cnt=cnt-1
  931. RETURN
  932.  
  933. cons:
  934.  FPX=FPX+SM
  935. RETURN
  936.  
  937. slout:
  938. FPX=FPX+CD
  939.   CD=TRUNC((CD/2)+0.5)
  940.     IF CD<0 THEN CD=0
  941.     ENDIF
  942.     IF CD>SM THEN CD=SM
  943.     ENDIF
  944. RETURN
  945.  
  946. err:
  947.  
  948. /* Create an error message for external program */
  949.  
  950. flgb=1
  951.  
  952. mess="Slowing must be more than 1 frame"
  953.  
  954. RETURN
  955.  
  956. err2:
  957.  
  958. /* Create an error message for external program */
  959.  
  960. flgb=1
  961.  
  962. mess="Cannot move less than 1 pixel per frame"
  963.  
  964. RETURN
  965.  
  966. err3:
  967.  
  968. /* Create an error message for external program */
  969.  
  970. flga=1
  971.  
  972. mess="Unable to open text file in RAM for output"
  973.  
  974. RETURN
  975.  
  976. moveadj:
  977.  
  978. /* Create a message for use in main program.  The message
  979.    Has been created in seperate lines to better fit any kind 
  980.                        of requester */
  981. flg=1
  982.  
  983. AdjMess.=""
  984.    AdjMess.1="     Because the distance is greater than     "
  985.    AdjMess.2=" the frames some frames need to be duplicated."
  986.    AdjMess.3="  Would you like to adjust the image size to  "
  987.    AdjMess.4="                   compensate?                " 
  988.  
  989. Return /* Get a signal from main program */
  990.  
  991. Contsg:
  992.  
  993. /* process the signal and do accordingly */
  994.  
  995. IF sg=1 THEN CALL slowmain
  996. ENDIF
  997.  
  998. percCa=TRUNC((fr/fd)+0.5)
  999. A=(A+percC)+percC
  1000. R=TRUNC((A/percA)+0.5) /* Total distance for slowin */
  1001. U=TRUNC((A/percB)+0.5) /* Total distance for slowout */ 
  1002.  
  1003. fd=fr-A
  1004. sz=(fr/fd)+100 /* percent to Scale image when more pixels are needed */
  1005.  
  1006. Return
  1007.